"""
定义工厂函数，该函数"生产"出指定的flask应用程序对象
"""

from flask import Flask


def create_flask_app(default_config_obj):
    """
    该函数"生产"出指定的flask应用程序对象
    :return: default_config_obj
    """

    app = Flask(
        __name__,  # import_name: 代表flask应用程序对象的导入的模块名称

        # 静态文件根目录；__name__指明模块main, main模块所在的目录是toutiao_web;
        # 那么静态文件的根目录： toutiao_web/static
        static_folder='static',

        # 静态请求的路径前缀
        # 127.0.0.1:5000/static/1.jpg
        # 静态请求路径前缀:  /static
        # 请求的文件是：  /1.jpg  -->    toutiao_web/static/1.jpg
        static_url_path='/static',

        # 那么模版文件的根目录： toutiao_web/templates
        template_folder='templates'
    )

    app.config.from_object(default_config_obj)

    app.config.from_envvar("FLASK_CONFIG_PATH", silent=True)

    # 1、通过对象方式导入配置
    # app.config.from_object(DefaultSettings)

    # 2、通过文件导入配置
    # app.config.from_pyfile('settings.py')

    # 3、痛过json文件导入配置
    # 注意事项：按照json文件进行配置，布尔逻辑值无法表达
    # app.config.from_json('settings.json')

    # 4、通过环境变量指明的py文件导入配置
    # 意义：隐藏具体配置文件的路径
    # app.config.from_envvar("FLASK_CONFIG_PATH", silent=True)
    # print("密钥配置：", app.config.get('SECRET_KEY'))

    # 在flask应用程序对象中自定义了一个转换器，名字叫做mobile
    from .utitls.custom_converter import MobileConverter
    app.url_map.converters['mobile'] = MobileConverter


    # 3、注册蓝图到app
    from .resources.users import users_bp
    app.register_blueprint(users_bp)  # , url_prefix='/users')

    return app

